package com.gk.guinyote;

import java.util.Arrays;

import com.gk.guinyote.Baraja.Carta;


import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class PruebaActivity extends Activity{
	Button b0,resuelve,vermano;
	EditText et0;
	TextView tvCartasBaraja, tvTriunfo, tvRondas, tvJugador;
	TextView[] tvcm;
	LinearLayout ll_h_col2;
	Partida p;
	Jugada[] jugadas;
	int numJugadas;
	
	public void showToast(String logmsj, String msj){
		Toast toast = Toast.makeText(this.getApplicationContext(), msj, Toast.LENGTH_SHORT);
		toast.show();
		Log.d(logmsj,msj);
	}
	
	private void nuevaJugada(int num) {
		jugadas[numJugadas] = new Jugada(p.getJugadorActual(),p.getJugadorActual().getMano().get(num));
		showToast("Jugada",p.getJugadorActual().toString() + " juega " + p.getJugadorActual().getMano().get(num));
		p.getJugadorActual().getMano().remove(num);
		p.jugadorSiguiente();
		numJugadas++;
		
	}
	
	private boolean tieneCartasDelPalo(String palo) {
		for(int i=0; i<p.getJugadorActual().getMano().size(); i++){
			if (palo == p.getJugadorActual().getMano().get(i).getPalo())
				return true;
		}
		return false;
	}
	
	private void limpiarTVs() {
		// TODO Auto-generated method stub
		for(int i=0; i<6; i++){
			tvcm[i].setText("");
		}
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.prueba);
		b0 = (Button) findViewById(R.id.b0);
		b0.setOnClickListener(new OnClickListener() { //Jugar Carta
			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				//if(et0.getText().toString().length() != 0){
				int num = Integer.parseInt(et0.getText().toString());
				Jugada ganadora_actual;
				//showToast(String.valueOf(num));
				if(p.getRondas() < 4){
					if (numJugadas < 4){
						if (num >= 0 && num <p.getJugadorActual().getMano().size()){
							nuevaJugada(num);
						}
					}
				}
				else{ // Arrastre
					
					if (num >= 0 && num <p.getJugadorActual().getMano().size()){
						if (numJugadas != 0){ //Si no es la primera
							if (tieneCartasDelPalo(jugadas[0].getCartaJugada().getPalo())){
								if(p.getJugadorActual().getMano().get(num).getPalo() != jugadas[0].getCartaJugada().getPalo()){
									showToast("Arrastre", "Debes jugar una carta de "+ jugadas[0].getCartaJugada().getPalo());
								}
								else{
									nuevaJugada(num);
								}
							}
							else{ // No tiene cartas del palo arrastrado
								if(tieneCartasDelPalo(p.getTriunfo().getPalo())){ // Tiene triunfos
									if(p.getJugadorActual().getMano().get(num).getPalo() != p.getTriunfo().getPalo()){ //La carta que juega no es triunfo
										if(p.getIdJugador()%2 != jugadas[0].getJugador().getId()%2) //Son de distinto equipo
											showToast("Arrastre", "Debes usar triunfo para superar la jugada");
										else {//Si son del mismo equipo
											ganadora_actual = new Jugada(p.jugadaGanadora(jugadas, numJugadas, false));
											if(p.getIdJugador()%2 != ganadora_actual.getJugador().getId()%2 ) //Si la jugada ha sido superada por un rival
												if(puedeSuperar(ganadora_actual.getCartaJugada())){
													showToast("Arrastre", "Debes superar la jugada");
												}
												else
													nuevaJugada(num);
											}
									}
									else
										nuevaJugada(num); // Juega un triunfo
								}
								else	//Si no tiene triunfos puede tirar lo que sea
									nuevaJugada(num);
							}
						}
						else{ // es el primero en tirar en el arrastre
							nuevaJugada(num);
						}
					}
				}
			//}
			}
			
			//no tiene en cuenta triunfos solo mira si dada una carta el jugador tiene otra del mismo palo de mayor valor
			private boolean puedeSuperar(Carta cartaJugada) {
				// TODO Auto-generated method stub
				for(int i=0; i<p.getJugadorActual().getMano().size();i++){
					if(p.getJugadorActual().getMano().get(i).getPalo() == cartaJugada.getPalo()){
						if(p.getJugadorActual().getMano().get(i).getValor() > cartaJugada.getValor()){
							return true;
						}
						else{ 
							if(p.getJugadorActual().getMano().get(i).getValor() == cartaJugada.getValor()){ //Son del mismo valor
								if(p.getJugadorActual().getMano().get(i).getNumero() > cartaJugada.getNumero()){
									return true;
								}								
							}
						}
					}
				}
				return false;
			}
		});
	
		resuelve = (Button) findViewById(R.id.resuelve);
		resuelve.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {  //Resuelve jugada
				// TODO Auto-generated method stub
				if(numJugadas == 4){
					Jugada ganadora = new Jugada(p.resuelveTurno(jugadas));
					showToast("Ganadora", "Gana " +  ganadora.getJugador().toString() + " con " + ganadora.getCartaJugada().toString());
					Arrays.fill(jugadas, null);
					numJugadas = 0;
					tvCartasBaraja.setText("Cartas Baraja " + (p.getMibaraja().numCartasBaraja()));
					tvRondas.setText("Rondas " + p.getRondas());
					limpiarTVs();
				}
			}
		});
		
		vermano = (Button) findViewById(R.id.vermano);
		vermano.setOnClickListener(new OnClickListener() {
			
			public void onClick(View v) {
				// TODO Auto-generated method stub
				tvJugador.setText(p.getJugadorActual().toString());
				for(int i=0; i<p.getJugadorActual().getMano().size(); i++){
					tvcm[i].setText(i + ": " + p.getJugadorActual().getMano().get(i).toString());
				}
			}
		});
		
		et0 = (EditText) findViewById(R.id.et0);	
		p = new Partida();
		p.comenzarPartida();
		jugadas = new Jugada[4];
		numJugadas = 0;
		
		showToast("Triunfo", "Triunfo " + p.getTriunfo().toString());
		tvCartasBaraja = (TextView) findViewById(R.id.tvCartasBaraja);
		tvCartasBaraja.setText("Cartas Baraja " + (p.getMibaraja().numCartasBaraja()));
		tvTriunfo = (TextView) findViewById(R.id.tvTriunfo);
		tvTriunfo.setText("Triunfo " + p.getTriunfo().toString());
		tvRondas = (TextView) findViewById(R.id.tvRondas);
		tvRondas.setText("Rondas " + p.getRondas());
		
		tvJugador = (TextView) findViewById(R.id.tvJugador);
		ll_h_col2 = (LinearLayout) findViewById(R.id.ll_h_col2);
		tvcm = new TextView[6];
		for(int i=0; i<6; i++){
			tvcm[i] = new TextView(getApplicationContext());
			tvcm[i].setText("");
			ll_h_col2.addView(tvcm[i]);
		}
		
		tvJugador.setText(p.getJugadorActual().toString());
		
		
	}




}
